'use strict';

const Controller = require('egg').Controller;
// import Controller from 'egg' // SyntaxError: Unexpected token import

class HomeController extends Controller {
  async x50x() {
    await this.ctx.render('home/home/50x');
  }
  async index() {
    // this.ctx.body = 'hi, egg';
    // await this.ctx.render('home/index.html');
    

    this.ctx.loog('hello world');
    this.ctx.log('app.config.env', app.config.env);

    /*
    this.ctx.log('hello world', {name:'hello', age: 111});

    // 
    this.ctx.log('this.ctx.isIOSByExtend', this.ctx.isIOSByExtend);
    // 插件其实是挂载在 context 上的；
    this.ctx.log('this.ctx.isIOSByPlugin', this.ctx.isIOSByPlugin);
    this.ctx.log('this.ctx.ua', this.ctx.ua);// undefined；

    this.ctx.log('this.helper', this.helper);// undefined；
    
    // 基于这个情况，考虑在 app/extend/context.js 中设置 context.helper.prettyTime，发现出现 bug 了，暂时没找到原因~
    this.ctx.log('this.ctx.helper', this.ctx.helper);// 内含了 ctx、app 等对象；

    this.ctx.log('this.ctx.helper.ctx === this.ctx', this.ctx.helper.ctx === this.ctx);// true;
    this.ctx.log('this.ctx.helper.app', this.ctx.helper.app);// env 等 key；
    */
    
    const dataList = {
      list: [
        { id: 1, title: 'this is news 1', url: '/news/1', created_at: 1539149685 },
        { id: 2, title: 'this is news 2', url: '/news/2', created_at: 1543554038 }
      ]
    };

    /*
    const page = this.ctx.query.page || 1;

    // this.service 等价于 this.ctx.servcice;
    const newsList = await this.service.news.list(page);
    this.ctx.log('请求 /news 得到的数据 newsList', newsList);

    const newsList2 = await this.ctx.service.news.list2(page);
    this.ctx.log('请求 /public/topstories.json 得到的数据 newsList2', newsList2);   
    */
   

    // render(name, locals) 渲染模板文件, 并赋值给 ctx.body
    // renderView(name, locals) 渲染模板文件, 仅返回不赋值
    // renderString(tpl, locals) 渲染模板字符串, 仅返回不赋值（当使用 renderString 时需要指定模板引擎第三个参数，如果已经定义 defaultViewEngine 这里可以省略。）
    // ctx.body = await ctx.renderString('hi, {{ name }}', data, {viewEngine: 'nunjucks'});

    // 当设置了 defaultExtension，此时 render 就不用指定扩展名了；
    // await this.ctx.render('home/home/index.html', dataList);
    await this.ctx.render('home/home/index', dataList);
  }

  async news() {
    // 获取 POST 的 body 应该使用 ctx.request.body
    // this.ctx.log('参数 this.ctx.query.body', this.ctx.query.body);
    // this.ctx.log('参数 this.ctx.query', this.ctx.query);
    // this.ctx.log('参数 this.ctx.queries', this.ctx.queries);
    return this.ctx.body = [{
      id: 1,
      title: 'news1'
    }, {
      id: 2,
      title: 'news2'
    }, {
      id: 3,
      title: 'news3'
    }];
  }

  // async validate() {
  //   const ctx = this.ctx;
  //   try {
  //     ctx.validate(createRule);
  //   } catch (err) {
  //     ctx.logger.warn(err.errors);
  //     ctx.body = { success: false };
  //     return;
  //   }
  // }

  async select() {
    let data = await this.app.mysql.query('select * from test'); // 结果是一个数组
    this.app.log('home/home/select data', data);

    const test = await this.app.mysql.get('test', { id: 11 }); // 结果是一个对象，没有则是 null；
    this.app.log('home/home/select test', test);

    return this.ctx.body = data;
  }

  async insert() {
    // let data = await this.ctx.db.query('select * from ');
  }

  async update() {
    // let data = await this.ctx.db.query('select * from ');
  }

  async delete() {
    // let data = await this.ctx.db.query('select * from ');
  }
}

module.exports = HomeController;
